perm filename WINSUB.FAI[VIS,HPM]2 blob sn#110596 filedate 1974-07-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE	WINSUB
C00003 00003	PERUSE:	0
C00007 00004	VARIAN:	0
C00009 00005	CLN:	0
C00010 00006	CLNX:	0
C00011 00007	***** SAIL INTERFACE ********
C00012 00008	
C00014 00009	CLEAN:	MOVEM	12,ACS12
C00015 ENDMK
C⊗;
	TITLE	WINSUB
	INTERN	WIND,HORWIN,VERWIN
	ENTRY	INIWIN,DOWIN,BSTCOR,CLEAN
	EXTERN	PICWID,PICLIN,PICHIG,PICBIT,PICWIZ
	EXTERN	ROWTAB,COLTAB
WIND:	0
HORWIN:	0
VERWIN:	0

	MAXWID←←2000
	MAXLIN←←25
STRIP:	BLOCK	MAXWID
STRIP2:	BLOCK	MAXLIN*MAXWID

	A←ARRY2←ARRYO←BESTY←3 ↔ ARRY1←ARRY←CNT2←BESTX←4 ↔ DX1←VW←0
	B←T←16 ↔ C←TX←STRP←2 ↔ D←PT←PNT←5 ↔ TY←CNT←6
	SUMSQ←E←TXX←HC←7 ↔ PND←DX2←VC←10 ↔ PNC←X1←D1C←11
	PNE←Y1←D2C←12 ↔ PN1←X2←CNT1←13
	CC←Y2←TOP←14 ↔ DY1←POS←15 ↔ SUM←1 ↔ DL←17

	FOR I←-100,-1,1 { I*I
				}
SQRS:	FOR I←0,100,1   {I*I
				}
PERUSE:	0
	MOVN	T,HORWIN
	HRRM	T,CV
	HRRM	T,CV+2
	HRRM	T,CW
	HRRM	T,CW+1
	ADDI	T,1
	HRRM	T,DV
	HRRM	T,DV+2
	HRRM	T,DW
	HRRM	T,DW+1
	ADDI	T,1
	HRRM	T,EV
	HRRM	T,EV+2
	HRRM	T,EW
	HRRM	T,EW+1
	MOVN	STRP,PICWIZ
	IMUL	STRP,WIND
	SUB	STRP,PICWIZ
	HRLZ	STRP,STRP
	HRLZ	PNT,PICBIT
	LSH	PNT,6
	ADDI	PNT,-1(ARRY)
	MOVE	CNT,[SUB T,STRIP(POS)]
	ADD	CNT,PICWIZ
	MOVEM	CNT,PP
	MOVEM	CNT,PP0
	ADDI	CNT,1
	MOVEM	CNT,PP1
	SUBI	ARRYO,1
	MOVE	VW,VERWIN
	SETZ	SUM,
VERLP:	MOVE	CNT,STRP
UNPAK:	ILDB	T,PNT
	MOVEM	T,STRIP(CNT)
	AOBJN	CNT,UNPAK
	MOVE	CNT,HORWIN
	SETZB	POS,TOP
KLP:	SETZB	HC,VC
	SETZB	D1C,D2C
	MOVE	CNT2,WIND
JLP:	MOVE	CNT1,WIND
ILP:	MOVE	T,STRIP(POS)
	SUB	T,STRIP+1(POS)
	ADD	HC,SQRS(T)
	MOVE	T,STRIP(POS)
PP:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>(POS)
	ADD	VC,SQRS(T)
	MOVE	T,STRIP(POS)
PP1:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP +<PICWID>+1
	ADD	D1C,SQRS(T)
	MOVE	T,STRIP+1(POS)
PP0:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>
	ADD	D2C,SQRS(T)
	ADD	POS,PICWIZ
	SOJG	CNT1,ILP
	AOS	POS,TOP
	SOJG	CNT2,JLP
	CAMLE	HC,VC
	MOVE	HC,VC
	CAMLE	HC,D1C
	MOVE	HC,D1C
	CAMLE	HC,D2C
	MOVE	HC,D2C
	ADD	SUM,HC
	TRZ	HC,1				;THE LOCAL MAXIMUM TEST
	MOVEI	T,1
	CAMGE	HC,(ARRYO)
	AOJA	HC,CW
	ORM	T,(ARRYO)
CV:	CAMGE	HC,HORWIN(ARRYO)		;R HALF BECOMES -<HORWIN>
	AOJA	HC,DW
	ORM	T,HORWIN(ARRYO)			;BECOMES -<HORWIN>(ARRYO)
DV:	CAMGE	HC,1+HORWIN(ARRYO)		;BECOMES 1-<HORWIN>
	AOJA	HC,EW
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EV:	CAMGE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	AOJA	HC,LOOF
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
	JRST	LOOF
CW:	CAMLE	HC,HORWIN(ARRYO)		;-<HORWIN>
	ORM	T,HORWIN(ARRYO)			;-<HORWIN>
DW:	CAMLE	HC,1+HORWIN(ARRYO)		;1-<HORWIN>
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EW:	CAMLE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
LOOF:	PUSH	ARRYO,HC
	SOJG	CNT,KLP
	SUB	PNT,PICLIN
	SOJG	VW,VERLP
	JRST	@PERUSE

VARIAN:	0

SCANS:	0
	SETZ	TX,
	SETZB	SUM,SUMSQ
	MOVE	TY,Y1
LY1:	MOVE	PT,ARRY1
	ADD	PT,ROWTAB-1(TY)
	ADD	PT,COLTAB-2(X1)
	HLL	TX,X1
LX1:	ILDB	T,PT
	ADD	SUM,T
	ADD	SUMSQ,SQRS(T)
	MOVEM	T,STRIP(TX)
	AOBJN	TX,LX1
	AOBJN	TY,LY1
	IMUL	SUM,SUM
	IDIV	SUM,DX1
	IDIV	SUM,DY1
	SUB	SUMSQ,SUM
	MOVEM	SUMSQ,VARIAN

	MOVE	TY,Y2
	SETZ	TX,
LY2:	MOVE	PT,ARRY2
	ADD	PT,ROWTAB-1(TY)
	ADD	PT,COLTAB-2(X2)
	HLL	TX,X2
LX2:	ILDB	T,PT
	MOVEM	T,STRIP2(TX)
	AOBJN	TX,LX2
	AOBJN	TY,LY2

	HLLZ	X1,X1
	HLLZ	Y1,Y1
	HLLZ	X2,X2
	HLLZ	Y2,Y2
	SUB	X2,X1
	SUB	X2,[1,,0]
	SUB	Y2,Y1
	SUB	Y2,[1,,0]
	MOVE	DL,DX2
	SUB	DL,DX1
	HRLZI	SUM,377777
	SETZ	BESTY,

	SETZ	TXX,
SCY:	HLL	TXX,X2
SCX:	SETZB	TX,BESTX
	MOVEI	T,STRIP2(TXX)
	HRRM	T,SCAX
	MOVE	TY,Y1
SCAY:	HLL	TX,X1
SCAX:	MOVE	T,STRIP2(TX)
	SUB	T,STRIP(TX)
	ADD	BESTX,SQRS(T)
	AOBJN	TX,SCAX
	ADDM	DL,SCAX
	AOBJN	TY,SCAY
	CAML	BESTX,SUM
	JRST	.+3
BTST:	MOVE	SUM,BESTX
	HRRZ	BESTY,TXX
	AOBJN	TXX,SCX
	ADD	TXX,DX1
	AOBJN	Y2,SCY
	IDIV	BESTY,DX2
	ASH	SUM,4
	IDIV	SUM,VARIAN
	JRST	@SCANS
CLN:	0
	MOVE	CNT,PICWIZ
	SUBI	CNT,2
	MOVE	A,PICHIG
	SUBI	A,2
	IMUL	CNT,A
	HRLZ	PND,PICBIT
	LSH	PND,6
	ADDI	PND,-1(ARRY)
	MOVE	PNC,PND
	ADD	PNC,PICLIN
	ILDB	B,PNC
	MOVE	PNE,PNC
	ADD	PNE,PICLIN
	ILDB	A,PNC
	MOVE	PN1,PNC
	ILDB	CC,PNC
	IBP	PND
	ILDB	D,PND
	ILDB	E,PNE
WOOP:	MOVE	C,CC
	CAMLE	B,C
	EXCH	B,C
	CAMLE	D,E
	EXCH	D,E
	CAMLE	B,D
	EXCH	B,D
	CAMLE	C,E
	EXCH	C,E
	CAMLE	C,D
	EXCH	C,D
	CAMLE	A,D
	DPB	D,PN1
	CAMGE	A,C
	DPB	C,PN1
	MOVE	PN1,PNC
	MOVE	B,A
	MOVE	A,CC
	ILDB	CC,PNC
	ILDB	D,PND
	ILDB	E,PNE
	SOJG	CNT,WOOP
	JRST	@CLN
CLNX:	0
	MOVE	CNT,PICWIZ
	MOVE	A,PICHIG
	SUBI	A,2
	IMUL	CNT,A
	HRLZ	PND,PICBIT
	LSH	PND,6
	ADDI	PND,-1(ARRY)
	MOVE	PNC,PND
	ADD	PNC,PICLIN
	MOVE	PNE,PNC
	ADD	PNE,PICLIN
	ILDB	D,PND
	ILDB	C,PNC
	ILDB	E,PNE
WOOF:	CAMG	C,D
	JRST	CLD
	CAMGE	D,E
	MOVE	D,E
	CAMLE	C,D
	DPB	D,PNC
	JRST	NXQ
CLD:	CAMLE	D,E
	MOVE	D,E
	CAMGE	C,D
	DPB	D,PNC
NXQ:	ILDB	D,PND
	ILDB	C,PNC
	ILDB	E,PNE
	SOJG	CNT,WOOF
	JRST	@CLN
;***** SAIL INTERFACE ********

	P←17

ACS12:	0
ACS16:	0
ACS17:	0
RETAD:	0


INIWIN:	POP	P,RETAD
	POP	P,WIND
	MOVE	1,PICWID
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,HORWIN
	MOVE	1,PICHIG
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,VERWIN
	JRST	@RETAD

DOWIN:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRYO
	POP	P,ARRY
	MOVEM	17,ACS17
	JSR	PERUSE
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	IDIV	SUM,HORWIN
	IDIV	SUM,VERWIN
	JRST	@RETAD


DAX1:	0
DAY1:	0
DAX2:	0
DAY2:	0

BSTCOR:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,DAY2
	POP	P,DAX2
	POP	P,DAY1
	POP	P,DAX1
	POP	P,ARRY2
	POP	P,Y1
	POP	P,X1
	POP	P,T
	SUBI	Y1,-1(T)
	HRRE	DY1,Y1
	MOVN	Y1,Y1
	HRLZ	Y1,Y1
	HRR	Y1,T
	POP	P,T
	SUBI	X1,-1(T)
	HRRE	DX1,X1
	MOVN	X1,X1
	HRLZ	X1,X1
	HRR	X1,T
	POP	P,ARRY1
	MOVE	Y2,@DAY2
	MOVE	T,@DAY1
	SUBI	Y2,-1(T)
	MOVN	Y2,Y2
	HRLZ	Y2,Y2
	HRR	Y2,T
	MOVE	X2,@DAX2
	MOVE	T,@DAX1
	SUBI	X2,-1(T)
	HRRE	DX2,X2
	MOVN	X2,X2
	HRLZ	X2,X2
	HRR	X2,T
	MOVEM	17,ACS17
	JSR	SCANS
DIVTT:	ADDB	BESTX,@DAX1
	ADD	BESTX,DX1
	SUBI	BESTX,1
	MOVEM	BESTX,@DAX2
	ADDB	BESTY,@DAY1
	ADD	BESTY,DY1
	SUBI	BESTY,1
	MOVEM	BESTY,@DAY2
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	JRST	@RETAD


CLEAN:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRY
	MOVEM	17,ACS17
	JSR	CLN
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	JRST	@RETAD


	END